import { useRequest } from 'ahooks'
import type { Options } from 'ahooks/lib/useRequest/src/types'
import axios from 'axios'

import './__mock__'

/** 物流渠道-转换后数据 */
export interface IChannel {
  /** 路由渠道ID（唯一标识） */
  channelId: number
  /** 渠道名称 */
  channelName: string
  /** 渠道代码 */
  channelNo: string | null | undefined
  /** 服务商 */
  merchantServers: string | null | undefined
  /** 内置名 */
  channelInnerName: string | null | undefined
  /** 目的国 */
  destinationCountry: string | null | undefined
  /** 头程运输方式，1.海运 2.空运 3.卡航 4.铁路 */
  firstLine: number | null | undefined
  /** 尾程运输方式，1.快递 2.卡车 */
  tailLine: number | null | undefined
  /** 持续时间 */
  keepDate: string
}

/** 物流渠道-源数据 */
export interface IChannelOrigin {
  /** 渠道ID（唯一标识） */
  id: number
  /** 渠道名称 */
  name: string | null
  /** 渠道代码 */
  code: string | null
  /** 服务商 */
  merchant: string | null
  /** 内置名 */
  inlineName: string | null
  /** 目的国 */
  countryName: string | null
  /** 头程运输方式，1.海运 2.空运 3.卡航 4.铁路 */
  firstLine: number | null
  /** 尾程运输方式，1.快递 2.卡车 */
  tailLine: number | null
  /** 持续时间 */
  keepDate?: string
}

interface IRes {
  /** 转换后数据 --- 涉及 AgGrid 编辑的务必使用副本 */
  list: IChannel[]
  /** 源数据 */
  originList: IChannelOrigin[]
}

/** SWR 获取物流渠道列表 */
export const useChannels = (opts?: Options<IRes, []>) => {
  return useRequest<IRes, []>(
    async () => {
      const res = await axios.get(`/api/admin/channels/all`)
      const originList: IChannelOrigin[] = res.$data || []
      const list = originList.map<IChannel>(d => ({
        channelId: d.id,
        channelName: d.name || '',
        channelNo: d.code,
        merchantServers: d.merchant,
        channelInnerName: d.inlineName,
        destinationCountry: d.countryName,
        firstLine: d.firstLine,
        tailLine: d.tailLine,
        keepDate: d.keepDate || '',
      }))
      return { list, originList }
    },
    {
      cacheTime: -1, // 永不过期
      staleTime: 1000 * 60 * 5, // 5 分钟新鲜
      ...opts,
      cacheKey: 'SWRApi_useChannels',
    },
  )
}
